home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / machack / Hacks96 / FlyPaper.sit / Fly Paper / FlyPaper Source / WDEF / WindowTester.cpp < prev    next >
Text File  |  1996-06-22  |  6KB  |  296 lines

  1. void DrawWindowColors (WindowPtr w);
  2.  
  3. #define    kDragOnLeftVarCode    1
  4.  
  5. #define    kZigSize            3
  6. typedef struct {
  7.     struct {
  8.         Point    topLeft;
  9.         Point    bottomRight;
  10.     } point;
  11.     Rect    rect;
  12. } EasyRect;
  13.  
  14.  
  15. static
  16. void        ZigZag (short varCode, Point start, Point finish)
  17. {
  18.     short    horizontalOffset = (varCode & kDragOnLeftVarCode) ? -kZigSize : kZigSize;
  19.     
  20.     while (start.v > finish.v) {
  21.         LineTo (start.h += horizontalOffset, start.v -= kZigSize);
  22.         horizontalOffset *= -1;
  23.     }
  24. }
  25.  
  26. static
  27. void        MakeBorder (short varCode, Rect& contentRect, Boolean outset)
  28. {
  29.     Point    frameStart, frameFinish, zigStart, zigFinish;
  30.     short    width;
  31.     short    height, slop;
  32.  
  33.     {
  34.         Rect        bounds = contentRect;
  35.  
  36.         if (varCode & kDragOnLeftVarCode) {
  37.                         
  38.             if (outset) {
  39.                 frameStart.v = bounds.top - 1;
  40.                 frameStart.h = bounds.right + 1;
  41.                 frameFinish.v = bounds.bottom + 1;
  42.                 frameFinish.h = bounds.right + 1;
  43.                 
  44.                 width = bounds.left - bounds.right - 2;
  45.  
  46.                 zigStart.v = frameFinish.v - 1;
  47.                 zigStart.h = frameFinish.h;
  48.                 zigFinish.v = frameStart.v + 1;
  49.                 zigFinish.h = frameStart.h;
  50.             } else {
  51.             
  52.                 frameStart.v = bounds.top;
  53.                 frameStart.h = bounds.right;
  54.                 frameFinish.v = bounds.bottom;
  55.                 frameFinish.h = bounds.right;
  56.                 width = bounds.left - bounds.right;
  57.             
  58.                 zigStart = frameFinish;
  59.                 zigFinish = frameStart;
  60.             }
  61.         } else {
  62.             
  63.             if (outset) {
  64.                 frameStart.v = bounds.top - 1;
  65.                 frameStart.h = bounds.left - 1;
  66.                 frameFinish.v = bounds.bottom + 1;
  67.                 frameFinish.h = bounds.left - 1;
  68.                 
  69.                 width = bounds.right - bounds.left + 2;
  70.  
  71.                 zigStart.v = frameFinish.v - 1;
  72.                 zigStart.h = frameFinish.h;
  73.                 zigFinish.v = frameStart.v + 1;
  74.                 zigFinish.h = frameStart.h;
  75.             } else {
  76.             
  77.                 frameStart.v = bounds.top;
  78.                 frameStart.h = bounds.left;
  79.                 frameFinish.v = bounds.bottom;
  80.                 frameFinish.h = bounds.left;
  81.                 width = bounds.right - bounds.left;
  82.             
  83.                 zigStart = frameFinish;
  84.                 zigFinish = frameStart;
  85.             }
  86.         }
  87.     }
  88.  
  89.     MoveTo (frameStart.h, frameStart.v);
  90.     LineTo (frameStart.h + width, frameStart.v);
  91.     LineTo (frameStart.h + width, frameFinish.v);
  92.     LineTo (frameFinish.h, frameFinish.v);
  93.  
  94.     LineTo (zigStart.h, zigStart.v);
  95.     
  96.     // calculate slop
  97.     height = zigStart.v - zigFinish.v;
  98.     slop = height % (kZigSize * 2);
  99.     
  100.     Point    actualZigStart = {    zigStart.v -= slop / 2, zigStart.h };
  101.     Point    actualZigFinish = {    zigFinish.v + (slop - (slop / 2)), zigFinish.h };
  102.  
  103.     LineTo (actualZigStart.h, actualZigStart.v);
  104.     
  105.     // ZigZag from start to finish
  106.     ZigZag (varCode, actualZigStart, actualZigFinish);
  107.     
  108.     LineTo (zigFinish.h, zigFinish.v);
  109. }
  110.  
  111. static
  112. void BorderTest (WindowPtr w)
  113. {
  114.     Rect        r = { 40, 40, 242, 242  };
  115.     short        varCode = 0;; // kDragOnLeftVarCode;
  116.     
  117.     SetPort    (w);
  118.     
  119.     ForeColor (blackColor);
  120. //    PaintRgn (w -> visRgn);
  121.     
  122.     RgnHandle        content = NewRgn ();
  123.     OpenRgn ();
  124.     MakeBorder (varCode, r, false);
  125.     CloseRgn (content);
  126.     
  127.     RgnHandle        larger = NewRgn ();
  128.     OpenRgn ();
  129.     MakeBorder (varCode, r, true);
  130.     CloseRgn (larger);
  131.     
  132.     RgnHandle        drag = NewRgn ();
  133.     Rect            dragRect = r;
  134.     
  135.     if (varCode & kDragOnLeftVarCode) {
  136.         dragRect.right = r.left;
  137.         dragRect.left = dragRect.right - 9;
  138.     } else {
  139.         dragRect.left = r.right;
  140.         dragRect.right = dragRect.left  + 9;
  141.     }
  142.     
  143.     InsetRect (&dragRect, 0, -1);
  144.     RectRgn (drag, &dragRect);
  145.     UnionRgn (larger, drag, larger);
  146.     
  147.     RgnHandle        shadow = NewRgn ();
  148.     CopyRgn (larger, shadow);
  149.     OffsetRgn (shadow, 1, 1);
  150.     UnionRgn (larger, shadow, larger);
  151.         
  152.     ForeColor (blackColor);
  153.     PaintRgn (larger);
  154.     ForeColor (yellowColor);
  155.     PaintRgn (content);
  156.     
  157.  
  158.     DisposeRgn (content);
  159.     DisposeRgn (larger);
  160.     DisposeRgn (shadow);
  161.     DisposeRgn (drag);
  162. }
  163.  
  164.  
  165. void DrawWindowColors (WindowPtr w)
  166. {
  167.     Rect    r;
  168.     int        i;
  169.     AuxWinHandle    auxInfo;
  170.     RGBColor        c;
  171.     Str255            s;
  172.     
  173.     SetPort (w);
  174.     TextFont (geneva);
  175.     TextSize (9);
  176.     
  177.     GetAuxWin (w, &auxInfo);
  178.     
  179.     for (i = 0; i <= (**(**auxInfo).awCTable).ctSize; i++) {
  180.         SetRect (&r, i * 16 + 2, 2, i * 16 + 16, 16);
  181.         c = (**(**auxInfo).awCTable).ctTable [i].rgb;
  182.         RGBForeColor (&c);
  183.         PaintRect (&r);
  184.         ForeColor (blackColor);
  185.         FrameRect (&r);
  186.         MoveTo (r.left + 1, r.bottom + 13);
  187.         NumToString (i, s);
  188.         DrawString (s);
  189.     }
  190. }
  191.  
  192.  
  193.  
  194. void main (void)
  195.  
  196. {
  197.     WindowPtr        w;
  198.     EventRecord        theEvent;
  199.     short            whichPart;
  200.     Rect            windowRect;
  201.     WindowPtr        whichWindow;
  202.     long            result;
  203.     long            newSize;
  204.     RGBColor        back = { 0xFFFF, 0xFFFF, 0x8000 };
  205.     
  206.     InitGraf (&qd.thePort);
  207.     InitFonts ();
  208.     InitWindows ();
  209.     InitMenus ();
  210.     TEInit ();
  211.     InitDialogs (nil);
  212.     
  213.     InitCursor ();
  214.  
  215.     if (OpenResFile ("\pScrappy") < 0) {
  216.         SysBeep (10);
  217.         return;
  218.     }
  219.     
  220.     SetRect (&windowRect, 20, 40, 440, 460);
  221.  
  222.     OffsetRect (&windowRect, -640, 0);
  223.  
  224.  
  225. //    w = NewCWindow (nil, &windowRect, "\p", true, 3200, (WindowPtr) -1, true, 0);
  226.  
  227.     w = GetNewCWindow (129, nil, (WindowPtr) -1);
  228.     
  229.     w = GetNewCWindow (128, nil, (WindowPtr) -1);
  230.  
  231.     ((WindowPeek) w) -> spareFlag = 1;
  232.     ShowWindow (w);
  233.     
  234.     if (!w) {
  235.         SysBeep (1);
  236.         return;
  237.     }
  238.     SetPort (w);
  239.     RGBBackColor (&back);
  240.     do {
  241.     
  242.         WaitNextEvent (everyEvent, &theEvent, 1, nil);
  243.         
  244.         if (theEvent.what == keyDown)
  245.             break;
  246.     
  247.         if (theEvent.what == updateEvt) {
  248.             BeginUpdate ((WindowPtr) theEvent.message);
  249.             
  250.             //DrawWindowColors ((WindowPtr) theEvent.message);
  251.             BorderTest ((WindowPtr) theEvent.message);
  252.             
  253.             // DrawGrowIcon ((WindowPtr) theEvent.message);
  254.             EndUpdate ((WindowPtr) theEvent.message);
  255.         }
  256.     
  257.         if (theEvent.what == mouseDown) {
  258.         
  259.             whichPart = FindWindow (theEvent.where, &whichWindow);
  260.                 
  261.             switch (whichPart) {
  262.                         
  263.                 case (inDrag) :
  264.                     DragWindow (whichWindow, theEvent.where, &qd.screenBits.bounds);
  265.                     break;
  266.                     
  267.                 case (inGrow) :
  268.                     newSize = GrowWindow (whichWindow, theEvent.where, &qd.screenBits.bounds);
  269.                     SizeWindow (whichWindow, newSize & 0x0000FFFF, (newSize & 0xFFFF0000) >> 16, true);
  270.                     break;
  271.                     
  272.                 case (inGoAway) :
  273.                     if (TrackGoAway (whichWindow, theEvent.where))
  274.                         return;
  275.                     break;
  276.                 
  277.                 case (inZoomIn) :
  278.                 case (inZoomOut) :
  279.                     TrackBox (whichWindow, theEvent.where, whichPart);
  280.                     break;
  281.                     
  282.                 case (inContent) :
  283.                     if (FrontWindow () != whichWindow)
  284.                         SelectWindow (whichWindow);
  285.                     else {
  286.                         SetPort (whichWindow);
  287.                         GlobalToLocal (&theEvent.where);
  288.                         MoveTo (theEvent.where.h, theEvent.where.v);
  289.                         LineTo (theEvent.where.h, theEvent.where.v);
  290.                     }
  291.                     break;
  292.                 }
  293.         }
  294.     
  295.     } while (1);
  296. }